package principle.liskov;

public class Liskov2 {
}

class Base { // base class
    public int fn2(int num1, int num2) {
        return num1 / num2;
    }
}

// A和B同时继承自Base，通过组合关系关联
// 不再单纯A继承B，因为B中需要重写A的方法
class A extends Base {
    public int fn1(int num1, int num2) {
        return num1 + num2;
    }
}

class B extends Base {
    private final A a = new A();  // A 和 B 由继承变成组合关系
    public int fn1(int num1, int num2) {
        return num1 - num2;
    }

    public int fn2(int num1, int num2) {
        return num1 * num2;
    }

    // 仍然想使用A中的功能
    public void fn3(int num1, int num2) {
        this.a.fn1(num1, num2);
    }
}
